package com.pm.buglist.service;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pm.buglist.domain.GYSBugs;
import com.pm.buglist.domain.vo.ImportBug;
import com.pm.buglist.domain.vo.OaWaiveParam;
import com.pm.buglist.domain.vo.ProjectBugVo;
import com.pm.buglist.domain.Bugs;
import com.pm.common.core.domain.AjaxResult;

import java.util.List;

/**
 * <p>
 * 项目bugs列表 服务类
 * </p>
 *
 * @author wwm
 * @since 2023-12-14
 */
public interface BugsService extends IService<Bugs> {

    /**
     * 查询项目bugs列
     *
     * @param id 项目bugs列主键
     * @return 项目bugs列
     */
    public Bugs selectBugsById(Long id);

    /**
     * 查询项目bugs列列表
     *
     * @param bugs 项目bugs列
     * @return 项目bugs列集合
     */
    public List<Bugs> selectBugsList(Bugs bugs);

    /**
     * 指派给研发的bug数据
     * */
    public List<Bugs> assignRdBugsList(Bugs bugs);

    /**
     * 指派给品质的bug数据
     * */
    public List<Bugs> assignQdeBugsList(Bugs bugs);

    /**
     * 新增项目bugs列
     *
     * @param bugs 项目bugs列
     * @return 结果
     */
    public int insertBugs(Bugs bugs);

    /**
     * 修改项目bugs列
     *
     * @param bugs 项目bugs列
     * @return 结果
     */
    public AjaxResult updateBugs(Bugs bugs);

    /**
     * 关闭bugs
     * */
    public AjaxResult closeBugsById(Bugs bugs);

    /**
     * 废弃bugs
     * */
    public AjaxResult waiveBugsById(Bugs bugs);

    /**
     * 项目bugs 处理
     * */
    public AjaxResult handleProjectBug(Bugs bugs);

    /**
     * bug转办
     * */
    public AjaxResult transferBug(Bugs bugs);

    /**
     * bug处理日志
     * */
    public AjaxResult bugHandleLogList(Long id);

    /**
     * 项目 bugsList
     * */
    public List<ProjectBugVo> projectBugsList(ProjectBugVo projectBugVo);

    /**
     * 导出第一版本的描述，最后关闭版本的分析与对策
     * */
    public List<ProjectBugVo> projectBugsListTwo(ProjectBugVo projectBugVo);

    /**
     * 根据id删除bug
     * */
    public AjaxResult delBugById(Long id);

    /**
     * 重置waive状态下的bug
     * */
    public AjaxResult resetBugById(Long id);

    /**
     * 根据id 激活已经关闭的bug
     * @return
     */
    public AjaxResult activationBugById(Long id);

    /**
     * 批量导入对应项目下的bug
     * */
    public AjaxResult batchImportBugs(List<ImportBug> list, Long pid);

    /**
     * 根据不同角色查询待处理bug数量统计
     * @param bugs
     * @return
     */
    public List<List<Object>> selectBugsCount(Bugs bugs);

    /**
     * 获取不同异常类型bug数据统计
     * */
    public AjaxResult getExceptionTypeDate();

    /**
     * 查询DQE bug结案数据统计
     * */
    public AjaxResult findCloseACaseDateCount();

    /**
     * 查询异常代码数据统计
     * */
    public AjaxResult findExceptionCodeType(Bugs bugs);

    //Dqe查询自己创建的研发申请废弃的数据
    public List<Bugs> findApproveWaiveBug();

    //RD查询自己申请waive的数据记录
    public List<Bugs> findWaiveRecord(Long pid,String putOATab);

    //推送 废弃 bug数据到Oa审批
    public AjaxResult putBugsToOaWaive(OaWaiveParam oaWaiveParam);


    AjaxResult queryTotalBugByProject(JSONObject param);

    AjaxResult queryTotalBugTypeByProject(JSONObject param);

    List<GYSBugs> assignGYSBugsList(Bugs bugs);
}
